home *** CD-ROM | disk | FTP | other *** search
/ Delphi 2 - Developers' Solutions / Delphi 2 Developers' Solutions.iso / dds / chap07 / howto05 / inmemory / memtable.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1995-09-10  |  1.6 KB  |  69 lines

  1. unit Memtable;
  2.  
  3. interface
  4.  
  5. uses Classes, SysUtils, DBTables, DB, DBiTypes, DbiProcs;
  6.  
  7. type
  8.  
  9.   TInMemoryTable = class( TTable )
  10.   private
  11.     FieldDescs: PFLDDesc;
  12.     NumberOfFields: Integer;
  13.     InMemoryTableName:array[0..79] of char;
  14.   protected
  15.     function CreateHandle: HDBICur; override;
  16.   public
  17.     Constructor CreateLike(
  18.       GivenTable: TTable;
  19.       NewName: String;
  20.       AOwner: TComponent
  21.     );
  22.     destructor Destroy; override;
  23.   end;
  24.  
  25. implementation
  26.  
  27. Constructor TInMemoryTable.CreateLike(
  28.   GivenTable: TTable;
  29.   NewName: String;
  30.   AOwner: TComponent
  31. );
  32. var
  33.   CursorProperties: CURProps;
  34. begin
  35.   inherited Create( AOwner);
  36.   StrPCopy( InMemoryTableName, NewName );
  37.   check( DbiGetCursorProps(GivenTable.Handle, CursorProperties));
  38.   NumberOfFields := CursorProperties.iFields;
  39.   FieldDescs := Nil;
  40.   try
  41.     FieldDescs := AllocMem( NumberOfFields * SizeOf( FLDDesc ));
  42.   except
  43.     raise Exception.Create( 'Not enough memory.' )
  44.   end;
  45.   check( DbiGetFieldDescs( GivenTable.handle, FieldDescs ));
  46. end;
  47.  
  48. Destructor TInMemoryTable.Destroy;
  49. begin
  50.   if FieldDescs <> nil then
  51.     FreeMem( FieldDescs, NumberOfFields * SizeOf( FLDDesc ));
  52.   inherited Destroy;
  53. end;
  54.  
  55. function TInMemoryTable.CreateHandle: HDBICur;
  56. begin
  57.   check(
  58.     DbiCreateInMemTable(        { Create a temporary table }
  59.       DBHandle,                 { Database handle }
  60.       InMemoryTableName,        { Logical Name }
  61.       NumberOfFields,           { No of fields }
  62.       FieldDescs,               { Array of field descriptors }
  63.       Result                    { Returned cursor handle }
  64.     )
  65.   );
  66. end;
  67.  
  68. end.
  69.